部署 OpenCV
1.更新源
sudo apt-get update
2.安装相关依赖
sudo apt-get install python3 python3-pip python3-dev python3-numpy
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install cmake git pkg-config
3.克隆 OpenCV
git clone https://github.com/opencv/opencv.git
4.部署 OpenCV
方法1:安装 OpenCV 的预编译版本
预编译版本通常会落后于 pip 和 github 的一个版本
sudo apt-get install libopencv-dev python3-opencv
方法2:通过 pip 安装 OpenCV
同时安装基础版和完整版会因命名而冲突,只能二选一安装
若已安装其中一个,需先卸载
pip uninstall opencv-python opencv-contrib-python
基础版(仅核心模块)
带基础功能(如基础图像处理、视频操作等)
pip install opencv-python
如果上面的命令报错,在末尾加上 --break-system-packages 再尝试
pip install opencv-python --break-system-packages
完整版(包含额外模块如 contrib、repository)
需要高级功能(如深度学习模型部署、人脸识别等)
pip install opencv-contrib-python --break-system-packages
方法3:从源代码编译安装
克隆 contrib
git clone https://github.com/opencv/opencv_contrib.git
创建一个构建目录
cd opencv
mkdir build
cd build
运行 cmake 配置
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_FFMPEG=ON \
-D WITH_CUDA=OFF \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") ..
参数说明:
编译配置内容
make -j$(nproc)
安装编译内容
sudo make install
更新动态链接器缓存
sudo ldconfig
返回用户目录
cd ~/
5.验证安装
如果没有返回错误,并且输出了 OpenCV 的版本号,这表示安装成功
python3 -c "import cv2; print(cv2.__version__)"
示例
在 opencv/samples/python 下已有一些示例
我们也可以尝试自己写
进入 opencv 目录
cd opencv
示例1:调用摄像头,并生成窗口实时预览
新建 Camera-Preview.py
sudo nano Camera-Preview.py
并添加以下内容
# 实时捕获摄像头
import numpy as np
import cv2
# 打开编号 0 的摄像头
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1) # -1 垂直翻转摄像头
# 彩色视频
cv2.imshow('frame', frame)
# 黑白视频
# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# cv2.imshow('gray', gray)
k = cv2.waitKey(30) & 0xff
if k == 27: break # 按 ESC 结束
cap.release()
cv2.destroyAllWindows()
按 Ctrl+O 保存,按 Ctrl+X 关闭
使用 Python3 运行 Camera-Preview.py
python3 Camera-Preview.py
可以看到新窗口中能实时预览摄像头
示例2:实时检测人脸
新建 FaceDetection.py
sudo nano FaceDetection.py
并添加以下内容
# 实时捕获摄像头并检测人脸
import numpy as np
import cv2
# 加载人脸检测的 Haar 级联分类器
face_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_frontalface_default.xml')
# 打开编号 0 的摄像头
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, 1) # -1 垂直翻转摄像头
# 检测人脸
faces = face_cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 在检测到的人脸周围绘制矩形框
for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 3)
# 显示结果图像
cv2.imshow('frame', frame)
k = cv2.waitKey(30) & 0xff
if k == 27: break # 按 ESC 结束
cap.release()
cv2.destroyAllWindows()
按 Ctrl+O 保存,按 Ctrl+X 关闭
使用 Python3 运行 FaceDetection.py
python3 FaceDetection.py
当检测到人脸后,会在周围绘制矩形框